package support;

import java.util.ArrayList;

/**
 *
 * @author Evangelista
 */
public class Tree {
    
    private class Queue {
        
        private ArrayList<Tree> queue = new ArrayList<Tree>();
        
        public void enqueue( Tree item ){
            queue.add(item);
        }
        
        public Tree dequeue(){
            Tree ret = queue.get(0);
            queue.remove(0);
            return ret;
        }
        
        public Tree see_next(){
            return queue.get(0);
        }
        
        public boolean is_empty(){
            return queue.isEmpty();
        }
    }
    
    private String          raiz   = "";
    private ArrayList<Tree> filhos = new ArrayList<Tree>();
    private Queue           q      = new Queue();
    
    public void set_raiz  ( String raiz )           { this.raiz = raiz;     }
    public void set_filhos( ArrayList<Tree> filhos ){ this.filhos = filhos; }
    
    public String          get_raiz  (){ return this.raiz;   }
    public ArrayList<Tree> get_filhos(){ return this.filhos; }
    
    public void build(){
        if( raiz.equals("") ){
            System.out.println( "A Raiz está vazia !" );
        } else {
            // Pega filhos
            // Add filhos no array "filhos"
            
            // Para cada filho no array "filhos"
            // // filhos.build()
        }
    }
    
    public String percorre_largura(){
        int maior = Integer.MIN_VALUE;
        q.enqueue(this);
        while(!q.is_empty()){ // Enquanto fila não vazia E nível limite alcançado
            // Desenfilera um cara
            Tree nova = q.dequeue();
            
            // Enfilera todos os filhos presentes no array "filhos"
            for( int i = 0; i < filhos.size(); i++ ){
                q.enqueue(filhos.get(i));
            }
            
            // Testa ASIFT na raiz do cara
            
            
            // Se match for maior que todos vistos
            // // Passa a ser maior
        }
        return ""; // Retorna o maior match
    }
    
}
